接下來這幾天,會介紹各種 Discord BOT 可以設定的觸發條件。
Discord BOT 的執行腳本可以分成兩個部分:觸發條件與執行內容。觸發條件有很多種,其中,最常見的就是「事件」,也就是今天的主題。
這個分類方式是我自己定義的
事件指的是「某個在 Discord 發生的特定情況」,我們可以設定要監聽 (listen) 的事件,一旦那個情況出現,就可以觸發我們設定的腳本。
其實在前幾天的 Quickstart 範例程式中已經有出現過它的蹤跡:on_ready
與 on_message
。而他們所對應的特定情況是:
on_ready
:Discord BOT (也就是 Client
) 完成準備的時候on_message
:當一個訊息被建立並送出的時候事件種類非常多,在 discord.py 的 API 文件中有完整列出所有可以被監聽的「事件」,以及該事件所需要的 intents
設定。
一共有兩種方法可以設定監聽事件:
@event
Client
class 並 override 特定的事件@event
使用方法也很簡單,只要使用對應的事件名稱當函數名稱,就可以進行設定:
import discord
intents = discord.Intents.default()
client = discord.Client(intents=intents)
@client.event
async def on_ready():
print('Ready!')
Client
並 overrideimport discord
class MyClient(discord.Client):
async def on_ready(self):
print('Ready!')
intents = discord.Intents.default()
client = MyClient(intents=intents)
前面有提到,事件種類非常多,因此這邊列幾個我覺得比較常見或重要的事件。
on_ready()
這個通常是用來確認是否啟動完成而已,有需要的話可以記錄在日誌 (log) 中。
on_member_join(member)
member
:加入的成員這個常應用於「發送歡迎訊息」的功能。當有新的成員加入時,可以自動發送歡迎訊息、伺服器守則等資訊 (發在頻道內或是私人訊息)。
on_message(message)
message
:傳送的訊息on_message_edit(before, after)
before
:原本的訊息after
:新的訊息on_message_delete(message)
message
:被刪除的訊息on_message
算是最常用的事件了,只要設定好關鍵字,用戶就可以依據需求選擇對應的關鍵字來觸發想要的功能。除此之外,也還有很多種應用,像是:
這邊指的反應是按下表情符號
on_reaction_add(reaction, user)
reaction
:增加的反應user
:做這件事的用戶這個最常用在「自助領取身分組」的功能。使用者按下表情符號進行回應後,Discord BOT 就可以知道:
reaction
)user
)附帶一提,可以用
reaction.message
取得「被反應」的訊息
最後,讓我們來簡單示範一下幾個事件的用法。
總覺得文章中沒有 Demo 的話怪怪的
# day06.py
import discord
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)
@client.event
async def on_ready():
print(f"We have logged in as {client.user}")
@client.event
async def on_message(message: discord.Message):
if message.author == client.user:
return
if message.content == "ping":
await message.channel.send("pong")
@client.event
async def on_message_edit(before: discord.Message, after: discord.Message):
await after.channel.send(
f"{after.author} 編輯了訊息!原本的訊息是:{before.content}"
)
@client.event
async def on_reaction_add(reaction: discord.Reaction, user: discord.User):
await reaction.message.channel.send(f"{user} 做出了 {reaction.emoji} 回應!")
client.run("your token here")
這段程式是從 Quickstart 範例程式改的,除了加上了 on_message_edit
與 on_reaction_add
之外,也補上了 type hint,這樣在開發上比較方便~
首先是最基本的 ping pong 回應:
接下來,對剛剛的 ping 訊息按下表情符號:
最後,編輯 ping 訊息:
今天介紹了 Discord BOT 觸發條件中的最常見的「事件」,並簡單的 Demo 了使用方法。明天會繼續介紹其他的觸發條件~